\documentclass[11pt,a4paper,twoside]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\usepackage{array}
\usepackage{amsmath}

%\setlength{\paperwidth}{21.1cm}%19.5
%\setlength{\paperheight}{29.8cm}
\setlength{\textwidth}{17.00cm}
\setlength{\textheight}{23.0cm}
%\setlength{\headsep}{0.7cm}
\setlength{\topmargin}{0.0cm}
\setlength{\oddsidemargin}{0.0cm}
\setlength{\evensidemargin}{0.0cm}
\newcommand{\fl} {\boldsymbol{-\!\!>}}
\newcommand{\bpc} {\boldsymbol{;}}
\newcommand{\bdp} {\boldsymbol{:}}
\newcommand{\bp} {\boldsymbol{.}}
\newcommand{\bc} {\boldsymbol{,}}
\newcommand{\blla} {\boldsymbol{\{}}
\newcommand{\bllc} {\boldsymbol{\}}}

\begin{document}

\thispagestyle{empty}

\begin{center}

{\large
\begin{tabular}{| lrcll |}
\hline
&&&&\\
~{\bf Program} & $prog$ & $\rightarrow$ & $binds$ & \\
&&&&\\
~{\bf Bindings} & $binds$ & $\rightarrow$ & $bind_1 \bpc \ldots\bpc~bind_n$ &
$n \geq 1$ \\
 & $bind$ & $\rightarrow$ & $var~vars \boldsymbol{=} expr$ & Lambda or normal bind \\
&&&&\\
~{\bf Expression} & $expr$ & $\rightarrow$ & ${\bf let}\ binds\ {\bf in}\ expr$ & Local definition \\
 &  & $\mid$ & ${\bf letrec}\ binds\ {\bf in}\ expr$ & Local recursion \\
 &  & $\mid$ & ${\bf case}\ expr\ {\bf of} \ alts$ & Case expression \\
 &  & $\mid$ & $constr\ atoms$ & Saturated constructor \\
 &  & $\mid$ & $var\ atoms$ & Application or variable \\
 &  & $\mid$ & $prim\ atoms$ & Saturate buil-in op \\
 &  & $\mid$ & $literal$ & Literales \\
&&&&\\
~{\bf Alternatives} & $alts$ & $\rightarrow$ & $aalt_1\bdp\ldots\bdp\
aalt_n\bp\ default$ & $n\geq 0 \textrm{ (Algebraic)}$ \\
 &  & $\mid$ & $palt_1\bdp\ldots\bdp\ palt_n\bp\ default$ & $n\geq 0 \textrm{ (Primitive)}$ \\
&&&&\\
~{\bf Algebraic alt} & $aalt$ & $\rightarrow$ & $constr\ vars\ \fl\
expr$ & \\
~{\bf Primitive alt} & $palt$ & $\rightarrow$ & $literal\ \fl\
expr$ & \\
~{\bf Default alt} & $default$ & $\rightarrow$ & $var\ \fl\
expr$ & \\
 & & $\mid$ & $default\ \fl\ expr$ & \\
&&&&\\
~{\bf Literals} & $literal$ & $\rightarrow$ & $\boldsymbol{0}\ \mid \ \boldsymbol{1}\ \mid\
\ldots$ & Primitive integers \\
 & & $\mid$ & $\ \ldots$ & \\
&&&&\\
~{\bf Primitive ops} & $prim$ & $\rightarrow$ & $\boldsymbol{+}\ \mid\ \boldsymbol{-}\
\mid\ \boldsymbol{*}\ \mid\ \boldsymbol{/} $ & Primitive integer op \\
 & & $\mid$ & $\boldsymbol{<}\ \mid\ \boldsymbol{<=}\
\mid\ \boldsymbol{>}\ \mid\ \boldsymbol{>=}\ \mid\ \boldsymbol{==}\ \mid\ \boldsymbol{/=} $ & Primitive op\\
 & & $\mid$ & $\boldsymbol{\&}\ \mid\ \boldsymbol{\&\&}\
\mid\ \boldsymbol{|}\ \mid\ \boldsymbol{||} $ & Primitive boolean op\\
 & & $\mid$ & $\ \ldots$ & \\
&&&&\\
~{\bf Variable lists} & $vars$ & $\rightarrow$ & $ var_1 \ldots\
var_n$ & $n\geq 0$\\
&&&&\\
~{\bf Atom lists} & $atoms$ & $\rightarrow$ & $ atom_1 \ldots\
atom_n $ & $n\geq 0$\\
 & $atom$ & $\rightarrow$ & $var\ \mid\ literal$ & \\
&&&&\\
\hline

\end{tabular}
}
\end{center}

\end{document}
